home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / AlexNeXTSTEPSource / Source / Chapter6_Events / ControlDemo / Control_4.m < prev    next >
Text File  |  1995-06-12  |  3KB  |  128 lines

  1. #import <appkit/appkit.h>
  2.  
  3. // a minimal program to demonstrate how
  4. // to add controls to a window
  5.  
  6. main()
  7. {
  8.     // create an application object
  9.     // to establish connection to
  10.     // Window Server
  11.     id NXApp = [Application new];
  12.     id theWindow;
  13.     id theMenu;
  14.     id theButton;
  15.     id theSlider;
  16.     id theTextField;
  17.     id theForm;
  18.     id targetWindow;
  19.     NXRect theRect;
  20.  
  21.     // create a window that's at 125, 125
  22.     // and is 200 by 300 pixels
  23.     NXSetRect(&theRect, 125, 125, 200, 300);
  24.     theWindow = [ [Window alloc]
  25.         initContent:&theRect
  26.         style: NX_TITLEDSTYLE
  27.         backing:NX_BUFFERED
  28.         buttonMask:NX_MINIATURIZEBUTTONMASK
  29.         defer:YES];
  30.  
  31.     // create the menu
  32.     theMenu = [ [Menu alloc]
  33.         initTitle: [NXApp appName] ];
  34.     // create the menu option
  35.     [theMenu addItem:"Quit"
  36.         action:@selector(terminate:)
  37.         keyEquivalent:'q'];
  38.  
  39.     // resize menu to accomodate menu option
  40.     [theMenu sizeToFit];
  41.     [NXApp setMainMenu:theMenu];
  42.  
  43.     // create a button that's 80 by 20
  44.     NXSetRect(&theRect, 0, 0, 80, 20);
  45.     theButton = [ [Button alloc]
  46.         initFrame:&theRect];
  47.     // set the title for the button
  48.     [theButton setTitle:"Press Here"];
  49.     // since the button is a view, we need
  50.     // to install it as the subview of the
  51.     // window's contentview or else it
  52.     // won't draw
  53.     [ [theWindow contentView]
  54.         addSubview: theButton];
  55.  
  56.     // create the target window for the button
  57.     targetWindow = [ [Window alloc]
  58.         initContent:NULL
  59.         style: NX_RESIZEBARSTYLE
  60.         backing:NX_BUFFERED
  61.         buttonMask:NX_MINIATURIZEBUTTONMASK
  62.         defer:YES];
  63.     // make  window target of button
  64.     [theButton setTarget:targetWindow];
  65.     // when pressed, button sends
  66.     // makeKeyAndOrderFront: message
  67.     // to the window 
  68.     [theButton setAction:@selector
  69.         (makeKeyAndOrderFront:)];
  70.  
  71.     // create a horizontal slider 100 x 15
  72.     NXSetRect(&theRect, 0, 100, 100, 15);
  73.     theSlider = [ [Slider alloc]
  74.         initFrame:&theRect];
  75.     // set the min value to 0.0
  76.     [theSlider setMinValue:0.0];
  77.     // set the max value to 10.0
  78.     [theSlider setMaxValue:10.0];
  79.     [ [theWindow contentView]
  80.         addSubview:theSlider];
  81.  
  82.     // create a textfield that's 75 by 20
  83.     NXSetRect(&theRect, 0, 150, 75, 20);
  84.     theTextField = [ [TextField alloc]
  85.         initFrame:&theRect];
  86.     // make the text editable
  87.     [theTextField setEditable:YES];
  88.     [ [theWindow contentView]
  89.         addSubview:theTextField];
  90.  
  91.     // make the textfield the target of
  92.     // the slider and vice versa
  93.     [theSlider setMinValue:0.0];
  94.     [theSlider setMaxValue:10.0];
  95.     [theSlider setTarget:theTextField];
  96.     [theSlider setAction:
  97.         @selector(takeFloatValueFrom:)];
  98.     [theTextField setTarget:theSlider];
  99.     [theTextField setAction:
  100.         @selector(takeFloatValueFrom:)];
  101.  
  102.     // create a form that's 150 by 100
  103.     NXSetRect(&theRect, 0, 200, 150, 100);
  104.     theForm = [ [Form alloc]
  105.         initFrame:&theRect];
  106.     // add three entries to the form
  107.     [theForm addEntry: "Name"];
  108.     [theForm addEntry: "Address"];
  109.     [theForm addEntry: "Phone"];
  110.     // set the size of the form
  111.     [theForm sizeToFit];
  112.     [ [theWindow contentView]
  113.         addSubview:theForm];
  114.  
  115.     [theForm setTarget:theButton];
  116.     // button should act as though
  117.     // it had been cliked
  118.     [theForm setAction:
  119.         @selector(performClick:)];
  120.  
  121.     // send the window to the front
  122.     // and display it
  123.     [theWindow makeKeyAndOrderFront:nil];
  124.  
  125.     // go into event loop to wait for events
  126.     [NXApp run];
  127. }
  128.